// G4提供的头文件
#include "G4RunManager.hh"
#include "G4Event.hh"

// 用户编写的头文件
#include "G4ExtensionEventAction.hh"
#include "G4ExtensionRunAction.hh"

// 构造函数，参数为runAction
G4ExtensionEventAction::G4ExtensionEventAction(G4ExtensionRunAction* runAction)
: fRunAction(runAction){

    // 打开文件
    outFile.open("../out/out.txt", std::ios::out | std::ios::trunc);
    if (!outFile.is_open()) {
        G4cerr << "Error opening file: out.txt" << G4endl;
    }
}

// 析构函数
G4ExtensionEventAction::~G4ExtensionEventAction(){
    // 关闭文件
    if (outFile.is_open()) {
        outFile.close();
    }
}

// 此函数每个event开始前运行
void G4ExtensionEventAction::BeginOfEventAction(const G4Event*){

    fEdep = 0.0;                    // 每个event开始前，将能量沉积置零
}

// 此函数每个event结束后运行一次
void G4ExtensionEventAction::EndOfEventAction(const G4Event*){
   
    fRunAction->AddEdep(fEdep);     // 每个event结束后，将本次event能量沉积值交给runAction

    if (outFile.is_open()) {
        outFile << fEdep << G4endl;  // 将每个事件的能量沉积写入文件
    }
 
}

// 在steppingAction中运行，累加每个step的能量沉积
void G4ExtensionEventAction::AddEdep(G4double edep){
    
    fEdep += edep;                  // 累加step中沉积的能量
}